#pragma once

#ifdef _WIN32
#include <Windows.h>
#include <cstdio>
#include <CRTDBG.h>
#define UTIL_ASSERT(_exp)  _ASSERTE((_exp))
#define UTIL_PRINTF        printf_s
#else
#include <assert.h>
#define UTIL_ASSERT(_exp)  assert(_exp)
#define UTIL_PRINTF        printf

#endif

unsigned int get_rand(void);
int gen_array(int a[], int n);
int *get_array_mem(int n);
void destroy_array_mem(void *p);
int cmp_array(int a[], int b[], int n);
void copy_array(int a[], int b[], int n);
void xcopy_array(int **a, int b[], int n);
void prt_array(int a[], int n);

void * util_malloc(size_t n);
void * util_memset(void *s, int c, size_t n);
int  util_memcmp(const void *a, const void *b, size_t sz);
int util_strcmp(const char *s1, const char *s2);
void util_free(void *p);

int util_printf(const char *fmt, ...);
void shuffle_array(int a[], int n);

